From: Georges Basile Stavracas Neto Date: Wed, 24 Jun 2020 18:37:42 +0000 (-0300) Subject: appDisplay: Allow reordering folders X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~684^2^2~101 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f06c257952aaa0abcbf1bbe93051253d35ce09c7;p=gnome-shell.git appDisplay: Allow reordering folders Implement the methods to sort and query item positions using the index in the GSettings key, and store the updated positions when accepting the drop. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1284 --- diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index e4799e0d8..a6c4d0643 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -1624,6 +1624,33 @@ class FolderView extends BaseAppView { return appIds; } + _getItemPosition(item) { + const appIds = this._getFolderApps(); + const appIndex = appIds.indexOf(item.id); + + if (appIndex === -1) + return [-1, -1]; + + const { itemsPerPage } = this._grid; + return [Math.floor(appIndex / itemsPerPage), appIndex % itemsPerPage]; + } + + _compareItems(a, b) { + const appIds = this._getFolderApps(); + + const aPosition = appIds.indexOf(a.id); + const bPosition = appIds.indexOf(b.id); + + if (aPosition === -1 && bPosition === -1) + return a.name.localeCompare(b.name); + else if (aPosition === -1) + return 1; + else if (bPosition === -1) + return -1; + + return aPosition - bPosition; + } + // Overridden from BaseAppView animate(animationDirection) { this._grid.animatePulse(animationDirection); @@ -1684,6 +1711,16 @@ class FolderView extends BaseAppView { return apps; } + acceptDrop(source) { + if (!super.acceptDrop(source)) + return false; + + const folderApps = this._orderedItems.map(item => item.id); + this._folder.set_strv('apps', folderApps); + + return true; + } + addApp(app) { let folderApps = this._folder.get_strv('apps'); folderApps.push(app.id);